import axios from 'axios'
import router from '../router'
// 最大安全整数
import Jsonbig from 'json-bigint'
// token
import auth from "@/utils/auth"
//  最大安全整数配置，响应数据转换方式
axios.defaults.transformResponse = [(data) => {
    // data原始数据格式(json字符串)
    try {
        // 当data不为空时进行转换
        return Jsonbig.parse(data)
    } catch (e) {
        // 转为为空是返回本身
        return data
    }
}]
// axios.defaults.baseURL = "http://ttapi.research.itcast.cn/mp/v1_0"
// 请拦截器
axios.interceptors.request.use(config => {
    const token = auth.getUser().token
    if (token) {
        config.headers.Authorization = `Bearer ${token}`
    }

    return config


}, err => {
    return promise.reject(err)
})

// 响应拦截器
// axios.interceptors.response.use(res => res, err => {
//     if (err.response && err.response.status === 401) {
//         router.push('/login')
//     }
//     return promise.reject(err)
// })
axios.interceptors.response.use(res => res, err => {
    // token失效拦截
    // err.response 响应报文对象
    // err.response.status 响应状态码
    // 严谨判断：首先存在response，然后去去除status做判断
    if (err.response && err.response.status === 401) {
        // this.$router.push('/login') this是vue实例
        // $router就是路由实例，src/router/index.js 导出的就是路由实例
        // router也可以调用push函数，导入router模块即可
        router.push('/login')
    }
    return Promise.reject(err)
})
export default axios 